<?php

/**
 * 微信支付
 * zc
 * 2018年11月7日10:54:58
 */
class Pay extends Weixin_Controller
{
    function __construct()
    {
       parent::__construct();
       $this->load->model('Weixin/WeixinPay_model', 'pay');
    }

    /**
     * 微信支付
     */
    function pay()
    {
        if ($_POST)
        {
            $post = $this->input->post();
            $openid = $this->pay->getOpenid();
            $post['openid'] = $openid;
            $data = $this->pay->pay($post);

            echo json_encode($data);
        }
    }

    /**
     * 微信回调
     */
    function notify()
    {
        $config = new WxPayConfig();
        $notify = new PayNotifyCallBack();
        $notify->Handle($config, false);
    }

    //重写回调处理函数
	/**
	 * @param WxPayNotifyResults $data 回调解释出的参数
	 * @param WxPayConfigInterface $config
	 * @param string $msg 如果回调处理失败，可以将错误信息输出到该方法
	 * @return true回调出来完成不需要继续回调，false回调处理未完成需要继续回调
	 */
	public function NotifyProcess($objData, $config, &$msg)
	{
		$data = $objData->GetValues();
		//TODO 1、进行参数校验
		if(!array_key_exists("return_code", $data) 
			||(array_key_exists("return_code", $data) && $data['return_code'] != "SUCCESS")) {
			//TODO失败,不是支付成功的通知
			//如果有需要可以做失败时候的一些清理处理，并且做一些监控
			$msg = "异常异常";
			return false;
		}
		if(!array_key_exists("transaction_id", $data)){
			$msg = "输入参数不正确";
			return false;
		}

		//TODO 2、进行签名验证
		try {
			$checkResult = $objData->CheckSign($config);
			if($checkResult == false){
				//签名错误
				Log::ERROR("签名错误...");
				return false;
			}
		} catch(Exception $e) {
			Log::ERROR(json_encode($e));
		}

        //TODO 3、处理业务逻辑
        //insert table
		$notfiyOutput = array();
		
		//查询订单，判断订单真实性
		if(!$this->Queryorder($data["transaction_id"])){
			$msg = "订单查询失败";
			return false;
		}
		return true;
	}
}